{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![open.svg](images/open.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MLP实现股价预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 逻辑回归模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用于解决分类问题的一种模型。根据数据特征或属性，计算其归属于某一类别的概率P(x)，根据概率数值判断其所属类别。\n",
    "- 主要应用场景：二分类问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逻辑回归数学表达式\n",
    "\n",
    "![logistic_regression formula](images/06_logistic_regression_formula.png)\n",
    "\n",
    "其中，y为类别结果，P为概率，x为特征值，a、b为常量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型评估回顾\n",
    "\n",
    "- 目的：通过模型评估对比模型表现、确定合适的模型参数（组）\n",
    "- 方法：计算测试数据集预测准确率以评估模型表现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 皮马印第安人糖尿病数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "基于数据集中包括的某些诊断测量来诊断性地预测患者是否患有糖尿病\n",
    "\n",
    "输入变量包括：独立变量包括患者的怀孕次数，葡萄糖量，血压，皮褶厚度，体重指数，胰岛素水平，糖尿病谱系功能，年龄\n",
    "\n",
    "输出结果：是否患有糖尿病\n",
    "\n",
    "数据来源：[Pima Indians Diabetes dataset](https://www.kaggle.com/uciml/pima-indians-diabetes-database)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**任务:** 通过怀孕次数、胰岛素水平、体重指数、年龄四个特征预测是否患有糖尿病"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 典型的逻辑回归概率分布曲线\n",
    "\n",
    "![unrolled_RNN](images/unrolled_RNN.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于t时刻及之前数据预测t+1时刻结果（滑动窗口预测）\n",
    "\n",
    "![sliding_window_time_series.svg](images/sliding_window_time_series.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# train LSTM on five years of Google \n",
    "# Supervised Deep Learning\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "\n",
    "# Importing the training set\n",
    "training_set_ori = pd.read_csv(\"zgpa_2016-18.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-01-04</td>\n",
       "      <td>30.57</td>\n",
       "      <td>30.57</td>\n",
       "      <td>28.63</td>\n",
       "      <td>28.78</td>\n",
       "      <td>70997200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-01-05</td>\n",
       "      <td>28.41</td>\n",
       "      <td>29.54</td>\n",
       "      <td>28.23</td>\n",
       "      <td>29.23</td>\n",
       "      <td>87498504</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-01-06</td>\n",
       "      <td>29.03</td>\n",
       "      <td>29.39</td>\n",
       "      <td>28.73</td>\n",
       "      <td>29.26</td>\n",
       "      <td>48012112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-01-07</td>\n",
       "      <td>28.73</td>\n",
       "      <td>29.25</td>\n",
       "      <td>27.73</td>\n",
       "      <td>28.50</td>\n",
       "      <td>23647604</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-01-08</td>\n",
       "      <td>28.73</td>\n",
       "      <td>29.18</td>\n",
       "      <td>27.63</td>\n",
       "      <td>28.67</td>\n",
       "      <td>98239664</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date   open   high    low  close    volume\n",
       "0  2016-01-04  30.57  30.57  28.63  28.78  70997200\n",
       "1  2016-01-05  28.41  29.54  28.23  29.23  87498504\n",
       "2  2016-01-06  29.03  29.39  28.73  29.26  48012112\n",
       "3  2016-01-07  28.73  29.25  27.73  28.50  23647604\n",
       "4  2016-01-08  28.73  29.18  27.63  28.67  98239664"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "training_set_ori.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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rdn3LCyERx6J69K9e/cyZcoULr/8ckBvfEuXLuXTTz/FOcegQYP46KOPOPbYYxk9ejQFBQXs3LmTXr16cc4559CiRYuo79utWzdatWpFhw4d6NevH2effTZnnHEGgwcP5oknnuDBBx+kqKiI77//nksvvZQpU6Zw+OGHc8kll/DUU09x9dVXM2TIEMaOHUuvXr0oKSmhQYMGP77/W2+9xUMPPcR7771H8+bNY/58y5cvZ/ny5Rx66KEAzJ49m+nTp9OgQQOmTZv243V//vOfadq0KfPnzwdg8+bNbNiwgb/85S+8//77NGrUiPvvv5+HHnqIO+64I67frakGL0FTnVUILRHkhOxIBCmyc+dOCgsLWbFiBT179qR///6AJoJJkybRvXt3QL8pL126lGOPPZbHHnuMt956C4CVK1eydOnSmImgdu3a/POf/2TmzJlMmTKFG264gdmzZ3PXXXdFXLd48WI6dOjA4YcfDsDQoUMZMWIE/fr1o3Xr1vTq1QuAJk2a/PiaqVOnMmvWLCZNmhRxPmzs2LFMnz6d+vXr88wzz1BQoMv3Dho0KCKh+N5//31ee+21H4+bN2/OxIkTWbhwIccccwwAP/zwA3379i3/F2vShyWCnJAdiSDOb+41zW8jKC4u5vTTT2fEiBFce+21OOe49dZb+fWvfx1x/bRp03j//ff573//S8OGDTn++OMr7D8vIvTu3ZvevXvTv39/hg0bViYRxFp32jkXs2vmwQcfzPLly1myZAlFRUVRrxkyZAhPPPFEmfONGjWK+/Occ/Tv359XX3016mtMmrNEkBOsjaAGNG3alMcee4wHH3yQ3bt3c/LJJzN69Ogf68JXr17N+vXrKS4upnnz5jRs2JAvv/ySTz75pNz3XbNmDZ999tmPx3PnzqVdu3YA5Ofn/1jf37FjR1asWMGyZcsAeOmllzjuuOPo2LEja9asYebMmQBs3bqVPXv2ANCuXTvefPNNLrnkEr744osa+T0MGDAgInFs3ryZPn368PHHH/8Y244dO1hS3XprU7HqVAf5Fi4Er3OCyW6WCGpI9+7d6datG6+99hoDBgzgwgsvpG/fvnTp0oXBgwezdetWBg4cyJ49e+jatSu33347fSrokrd7925uvvlmOnbsSGFhIWPHjuXRRx8F4NJLL+Wqq66isLAQ5xzPP/885557Ll26dKFW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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualising the results\n",
    "%matplotlib inline\n",
    "plt.plot(training_set_ori.loc[:,['open']], color = 'red', label = 'Real Stock Price')\n",
    "plt.title('Stock Price')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(731, 1) <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "# input/ouputs of recurrent neural (input != date, stock price)\n",
    "# but stock price at time t for input, and stock price t+1 for the output\n",
    "# create a set only with the \"Open\" Google stock price, extract that column\n",
    "# two-dimensional numpy array\n",
    "training_set_ori = training_set_ori.loc[:,['open']].values\n",
    "print(training_set_ori.shape,type(training_set_ori))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Feature Scaling + Normalization, since LSTM Several Sigmoid Activation function\n",
    "# Sigmoid 0 and 1, as is the case in Normalization\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "sc = MinMaxScaler() # default is 0,1\n",
    "# Fitting to training_set, scale training set, \n",
    "# transform we'll apply normalizationjust need min and max for normalization\n",
    "training_set = sc.fit_transform(training_set_ori)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(731, 1) <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "print(training_set.shape,type(training_set))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TqrNMAzDqFSISHh0gYjY8JFhGIZRiImCYRiGUYiJgmEYhlFIpfMpRGL37t3k5uayY8eOVJtiZBB16tQhKyuLmjVrptoUw0gaGSEKubm5NGzYkPbt21NCsinDiAtVZf369eTm5tKhQ4dUm2MYSSNhw0ciMs5LKTgnynHxUgYuFpEfRaRnWa+1Y8cOmjdvboJgVBgiQvPmza33aVQ5EulTmAAMiHF8INDRew3HZcAqMyYIRkVjf1NGVSRhoqCqn+NC/EbjNFzqP1XVb4AmImKhdg0jnZk1C779NtVWGAkklbOP9qVo7PtcimbtKkREhotIjojkrF27NinGlRYR4YYbbijcHzt2LKNGjUqqDcOGDWPy5MkAXHrppcybN69c51u2bBmdO3cuVl9QUMC1115L586d6dKlC7169eKXX34B4P777y/z9YL2x2rToUMHunfvTs+ePfn6668jtnvmmWd4+eWXy2yLEYXsbDj88FRbYSSQVIpCpL55xOQOqvqcqmaranbLliWu0k4JtWvX5q233mLdurLlj8nPz69Qe1544QUOPvjgCj2nz6RJk1i1ahU//vgjP/30E2+//TZNmjQByicK8TJmzBhmz57Ngw8+yOWXX17seH5+PldccQVDhw5NuC2GkWmkUhRyCeS7BbJwOWorJTVq1GD48OE88sgjxY4tX76c/v3707VrV/r378+vv/4KuKfe66+/nmOPPZabb76ZUaNGceGFF3LiiSfSvn173nrrLW666Sa6dOnCgAED2L17NwB33303vXr1onPnzgwfPpxIiZL69etHTk4OU6ZMoXv37nTv3p1OnToVzqSZNWsWffv25dBDD+Wkk05i9erVhfXdunWjd+/ePPXUUxE/6+rVq2nVqhXVqrk/n6ysLJo2bcrIkSP5/fff6d69O+effz4ADz/8MJ07d6Zz5848+uijhed4+eWX6dq1K926dWPIkCHFrnH77bczbNgwCgoKon7nxxxzDIsXLy78vLfeeit9+/blscceY9SoUYwdOxaAxYsXc/zxx9OtWzd69uzJkiVLACcuvXr1omvXrtx5551Rr5MR/PADfPJJqq0wKgGpnJI6BRghIhNx6Q7zvFyv5eO662D27HKfpgjdu0PghhaNq6++mq5du3LTTTcVqR8xYgRDhw7lwgsvZNy4cVx77bW88847ACxcuJD//Oc/VK9enVGjRrFkyRKmT5/OvHnz6N27N2+++SajR4/m9NNP59///jd/+tOfGDFiBHfccQcAQ4YM4f333+fUU0+NaNOgQYMYNGgQAIMHD6Zv377s3r2ba665hnfffZeWLVsyadIkbrvtNsaNG8dFF13EE088Qd++fbnxxhsjnnPw4MEcddRRfPHFF/Tv358LLriAHj168OCDD/Lkk08y2/v+Z82axfjx45kxYwaqyuGHH07fvn2pVasW9913H1999RUtWrRgw4airqebbrqJvLw8xo8fH9PZ+95779GlS5fC/U2bNvHZZ58BFBm6O//88xk5ciSnn346O3bsoKCggGnTprFo0SK+/fZbVJVBgwbx+eefc8wxx0S9XqWmu5fOuaIyLW7dCg0aVMy5jLQikVNS/wV8DXQSkVwRuURErhCRK7wmU3F5axcDzwNXJcqWZNGoUSOGDh3K448/XqT+66+/5rzzzgPcTfzLL78sPHbWWWdRvXr1wv2BAwdSs2ZNunTpwp49exgwwE3g6tKlC8uWLQNg+vTpHH744XTp0oVPPvmEuXPnUhKjR4+mbt26XH311SxYsIA5c+Zwwgkn0L17d+69915yc3PJy8tj06ZN9O3bt9DWSGRlZbFgwQIeeOABqlWrRv/+/fn444+Ltfvyyy85/fTTqV+/Pg0aNOCMM87giy++4JNPPuHMM8+kRYsWADRr1qzwPffccw+bNm3i2WefjSoIN954I927d+e5557jxRdfLKw/++yzi7XdsmULK1eu5PTTTwfcgrR69eoxbdo0pk2bRo8ePejZsyc///wzixYtKvF7NDzWrEm1BUaCSFhPQVXPLeG44pKgVyxxPNEnkuuuu46ePXty0UUXRW0TvNnVr1+/yLHatWsDUK1aNWrWrFnYtlq1auTn57Njxw6uuuoqcnJyaNOmDaNGjSpxLv3HH3/MG2+8weeffw64hVmHHHJIMSftpk2b4p6GWbt2bQYOHMjAgQPZe++9eeedd+jfv3+RNtHyf6tq1Ov06tWLWbNmsWHDhiJiEWTMmDGceeaZxerDv8uSbLjlllsi+iSMONi4MdUWGAnCYh9VMM2aNWPw4MFFnmD79OnDxIkTAXjttdc46qijynx+XwBatGjB1q1bS5yts3z5cq666ipef/116tatC0CnTp1Yu3ZtoSjs3r2buXPn0qRJExo3blzYk3nt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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(training_set, color = 'red', label = 'Normalized Stock Price')\n",
    "plt.title('Normalized Stock Price')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('Normalized Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Getting the inputs and the outputs, y_train is output, x_train is the input\n",
    "m = training_set.shape[0]\n",
    "X_train = training_set[0:m-1]\n",
    "y_train = training_set[1:m]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(730, 1)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Reshaping inputs, input has a certain format (2D array, features)\n",
    "# Changing the format of X_train into a 3D array, with a timestep\n",
    "# Keras Documentation - why reshape? - 3D tensor with shape (batch_size, timesteps)\n",
    "# time steps different between output and input time, input_dim dimension of input feature\n",
    "X_train = np.reshape(X_train, (m-1, 1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\niubi\\Anaconda3\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n",
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "# Part 2 - Building the RNN\n",
    "\n",
    "# Importing the keras libs and packages\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "\n",
    "# Initialising the RNN\n",
    "# predicting a continuous outcome, regression model\n",
    "regressor = Sequential()\n",
    "\n",
    "# Adding the input layer and the LSTM layer\n",
    "regressor.add(LSTM(units = 4, activation = 'sigmoid', input_shape = (None, 1)))\n",
    "\n",
    "# Adding the output layer\n",
    "regressor.add(Dense(units = 1))\n",
    "\n",
    "# Compiling the RNN\n",
    "# use the mean square error\n",
    "# regression won't be binary cross entropy, MSE for regression\n",
    "regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/200\n",
      "730/730 [==============================] - 1s 2ms/step - loss: 0.4048\n",
      "Epoch 2/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.3453\n",
      "Epoch 3/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.2936\n",
      "Epoch 4/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.2504\n",
      "Epoch 5/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.2140\n",
      "Epoch 6/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.1842\n",
      "Epoch 7/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.1595\n",
      "Epoch 8/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 0.1396\n",
      "Epoch 9/200\n",
      "730/730 [==============================] - 0s 65us/step - loss: 0.1241\n",
      "Epoch 10/200\n",
      "730/730 [==============================] - 0s 78us/step - loss: 0.1120\n",
      "Epoch 11/200\n",
      "730/730 [==============================] - 0s 88us/step - loss: 0.1021\n",
      "Epoch 12/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 0.0952\n",
      "Epoch 13/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 0.0898\n",
      "Epoch 14/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0857\n",
      "Epoch 15/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0828\n",
      "Epoch 16/200\n",
      "730/730 [==============================] - 0s 72us/step - loss: 0.0805\n",
      "Epoch 17/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0788\n",
      "Epoch 18/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 0.0776\n",
      "Epoch 19/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 0.0765\n",
      "Epoch 20/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0756\n",
      "Epoch 21/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0748\n",
      "Epoch 22/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0741\n",
      "Epoch 23/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0734\n",
      "Epoch 24/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0727\n",
      "Epoch 25/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0720\n",
      "Epoch 26/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.0713\n",
      "Epoch 27/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0706\n",
      "Epoch 28/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 0.0699\n",
      "Epoch 29/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 0.0692\n",
      "Epoch 30/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0686\n",
      "Epoch 31/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 0.0678\n",
      "Epoch 32/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 0.0671\n",
      "Epoch 33/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0663\n",
      "Epoch 34/200\n",
      "730/730 [==============================] - 0s 77us/step - loss: 0.0656\n",
      "Epoch 35/200\n",
      "730/730 [==============================] - 0s 75us/step - loss: 0.0648\n",
      "Epoch 36/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0641\n",
      "Epoch 37/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0633\n",
      "Epoch 38/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0625\n",
      "Epoch 39/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0617\n",
      "Epoch 40/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0609\n",
      "Epoch 41/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0601\n",
      "Epoch 42/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0592\n",
      "Epoch 43/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0584\n",
      "Epoch 44/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0576\n",
      "Epoch 45/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0567\n",
      "Epoch 46/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 0.0558\n",
      "Epoch 47/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0550\n",
      "Epoch 48/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 0.0541\n",
      "Epoch 49/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 0.0532\n",
      "Epoch 50/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 0.0523\n",
      "Epoch 51/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 0.0514\n",
      "Epoch 52/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 0.0505\n",
      "Epoch 53/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0495\n",
      "Epoch 54/200\n",
      "730/730 [==============================] - 0s 84us/step - loss: 0.0486\n",
      "Epoch 55/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 0.0477\n",
      "Epoch 56/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0467\n",
      "Epoch 57/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0458\n",
      "Epoch 58/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.0448\n",
      "Epoch 59/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0439\n",
      "Epoch 60/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.0429\n",
      "Epoch 61/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 0.0419\n",
      "Epoch 62/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.0409\n",
      "Epoch 63/200\n",
      "730/730 [==============================] - 0s 56us/step - loss: 0.0399\n",
      "Epoch 64/200\n",
      "730/730 [==============================] - 0s 56us/step - loss: 0.0389\n",
      "Epoch 65/200\n",
      "730/730 [==============================] - 0s 56us/step - loss: 0.0379\n",
      "Epoch 66/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 0.0370\n",
      "Epoch 67/200\n",
      "730/730 [==============================] - 0s 94us/step - loss: 0.0360\n",
      "Epoch 68/200\n",
      "730/730 [==============================] - 0s 92us/step - loss: 0.0350\n",
      "Epoch 69/200\n",
      "730/730 [==============================] - 0s 92us/step - loss: 0.0340\n",
      "Epoch 70/200\n",
      "730/730 [==============================] - 0s 89us/step - loss: 0.0329\n",
      "Epoch 71/200\n",
      "730/730 [==============================] - 0s 76us/step - loss: 0.0320\n",
      "Epoch 72/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 0.0310\n",
      "Epoch 73/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0300\n",
      "Epoch 74/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0290\n",
      "Epoch 75/200\n",
      "730/730 [==============================] - 0s 96us/step - loss: 0.0280\n",
      "Epoch 76/200\n",
      "730/730 [==============================] - 0s 97us/step - loss: 0.0270\n",
      "Epoch 77/200\n",
      "730/730 [==============================] - 0s 92us/step - loss: 0.0261\n",
      "Epoch 78/200\n",
      "730/730 [==============================] - 0s 90us/step - loss: 0.0251\n",
      "Epoch 79/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 0.0242\n",
      "Epoch 80/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0232\n",
      "Epoch 81/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0223\n",
      "Epoch 82/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0214\n",
      "Epoch 83/200\n",
      "730/730 [==============================] - 0s 84us/step - loss: 0.0205\n",
      "Epoch 84/200\n",
      "730/730 [==============================] - 0s 90us/step - loss: 0.0196\n",
      "Epoch 85/200\n",
      "730/730 [==============================] - 0s 93us/step - loss: 0.0187\n",
      "Epoch 86/200\n",
      "730/730 [==============================] - 0s 86us/step - loss: 0.0179\n",
      "Epoch 87/200\n",
      "730/730 [==============================] - 0s 82us/step - loss: 0.0170\n",
      "Epoch 88/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0162\n",
      "Epoch 89/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 0.0154\n",
      "Epoch 90/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0146\n",
      "Epoch 91/200\n",
      "730/730 [==============================] - 0s 79us/step - loss: 0.0138\n",
      "Epoch 92/200\n",
      "730/730 [==============================] - 0s 80us/step - loss: 0.0131\n",
      "Epoch 93/200\n",
      "730/730 [==============================] - 0s 89us/step - loss: 0.0124\n",
      "Epoch 94/200\n",
      "730/730 [==============================] - 0s 92us/step - loss: 0.0117\n",
      "Epoch 95/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 0.0110\n",
      "Epoch 96/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0104\n",
      "Epoch 97/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0097\n",
      "Epoch 98/200\n",
      "730/730 [==============================] - 0s 77us/step - loss: 0.0092\n",
      "Epoch 99/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 0.0086\n",
      "Epoch 100/200\n",
      "730/730 [==============================] - 0s 79us/step - loss: 0.0080\n",
      "Epoch 101/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 0.0075\n",
      "Epoch 102/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 0.0070\n",
      "Epoch 103/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.0065\n",
      "Epoch 104/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0061\n",
      "Epoch 105/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 0.0057\n",
      "Epoch 106/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 0.0053\n",
      "Epoch 107/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 0.0049\n",
      "Epoch 108/200\n",
      "730/730 [==============================] - 0s 78us/step - loss: 0.0045\n",
      "Epoch 109/200\n",
      "730/730 [==============================] - 0s 77us/step - loss: 0.0042\n",
      "Epoch 110/200\n",
      "730/730 [==============================] - 0s 88us/step - loss: 0.0039\n",
      "Epoch 111/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 0.0036\n",
      "Epoch 112/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0033\n",
      "Epoch 113/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0030\n",
      "Epoch 114/200\n",
      "730/730 [==============================] - 0s 78us/step - loss: 0.0028\n",
      "Epoch 115/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0026\n",
      "Epoch 116/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 0.0024\n",
      "Epoch 117/200\n",
      "730/730 [==============================] - 0s 56us/step - loss: 0.0022\n",
      "Epoch 118/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0020\n",
      "Epoch 119/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0018\n",
      "Epoch 120/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0017\n",
      "Epoch 121/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0015\n",
      "Epoch 122/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 0.0014\n",
      "Epoch 123/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 0.0013\n",
      "Epoch 124/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 0.0012\n",
      "Epoch 125/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 0.0011\n",
      "Epoch 126/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 0.0010\n",
      "Epoch 127/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 9.6064e-04\n",
      "Epoch 128/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 8.9386e-04\n",
      "Epoch 129/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 8.3256e-04\n",
      "Epoch 130/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 7.7834e-04\n",
      "Epoch 131/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 7.2929e-04\n",
      "Epoch 132/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 6.8762e-04\n",
      "Epoch 133/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 6.4797e-04\n",
      "Epoch 134/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 6.1367e-04\n",
      "Epoch 135/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 5.8365e-04\n",
      "Epoch 136/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 5.5750e-04\n",
      "Epoch 137/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 5.3627e-04\n",
      "Epoch 138/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 5.1422e-04\n",
      "Epoch 139/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 4.9697e-04\n",
      "Epoch 140/200\n",
      "730/730 [==============================] - 0s 59us/step - loss: 4.7952e-04\n",
      "Epoch 141/200\n",
      "730/730 [==============================] - 0s 58us/step - loss: 4.6687e-04\n",
      "Epoch 142/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 4.5441e-04\n",
      "Epoch 143/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 4.4404e-04\n",
      "Epoch 144/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 4.3539e-04\n",
      "Epoch 145/200\n",
      "730/730 [==============================] - 0s 60us/step - loss: 4.2716e-04\n",
      "Epoch 146/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 4.2114e-04\n",
      "Epoch 147/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 4.1544e-04\n",
      "Epoch 148/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 4.1008e-04\n",
      "Epoch 149/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 4.0589e-04\n",
      "Epoch 150/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 4.0286e-04\n",
      "Epoch 151/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 3.9931e-04\n",
      "Epoch 152/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.9631e-04\n",
      "Epoch 153/200\n",
      "730/730 [==============================] - 0s 62us/step - loss: 3.9485e-04\n",
      "Epoch 154/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.9208e-04\n",
      "Epoch 155/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 3.9067e-04\n",
      "Epoch 156/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 3.8923e-04\n",
      "Epoch 157/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8812e-04\n",
      "Epoch 158/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.8812e-04\n",
      "Epoch 159/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 3.8683e-04\n",
      "Epoch 160/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8671e-04\n",
      "Epoch 161/200\n",
      "730/730 [==============================] - 0s 63us/step - loss: 3.8518e-04\n",
      "Epoch 162/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8544e-04\n",
      "Epoch 163/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 3.8514e-04\n",
      "Epoch 164/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 3.8345e-04\n",
      "Epoch 165/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 3.8392e-04\n",
      "Epoch 166/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.8317e-04\n",
      "Epoch 167/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8288e-04\n",
      "Epoch 168/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.8297e-04\n",
      "Epoch 169/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8339e-04\n",
      "Epoch 170/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8354e-04\n",
      "Epoch 171/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8402e-04\n",
      "Epoch 172/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8136e-04\n",
      "Epoch 173/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 3.8204e-04\n",
      "Epoch 174/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8161e-04\n",
      "Epoch 175/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8106e-04\n",
      "Epoch 176/200\n",
      "730/730 [==============================] - 0s 67us/step - loss: 3.8131e-04\n",
      "Epoch 177/200\n",
      "730/730 [==============================] - 0s 64us/step - loss: 3.8232e-04\n",
      "Epoch 178/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8255e-04\n",
      "Epoch 179/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.8074e-04\n",
      "Epoch 180/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8079e-04\n",
      "Epoch 181/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 3.8085e-04\n",
      "Epoch 182/200\n",
      "730/730 [==============================] - 0s 74us/step - loss: 3.8100e-04\n",
      "Epoch 183/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 3.8111e-04\n",
      "Epoch 184/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 3.7985e-04\n",
      "Epoch 185/200\n",
      "730/730 [==============================] - 0s 79us/step - loss: 3.8007e-04\n",
      "Epoch 186/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 3.8103e-04\n",
      "Epoch 187/200\n",
      "730/730 [==============================] - 0s 73us/step - loss: 3.7960e-04\n",
      "Epoch 188/200\n",
      "730/730 [==============================] - 0s 77us/step - loss: 3.7994e-04\n",
      "Epoch 189/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.8004e-04\n",
      "Epoch 190/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.7992e-04\n",
      "Epoch 191/200\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "730/730 [==============================] - 0s 75us/step - loss: 3.8085e-04\n",
      "Epoch 192/200\n",
      "730/730 [==============================] - 0s 85us/step - loss: 3.8292e-04\n",
      "Epoch 193/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 3.7956e-04\n",
      "Epoch 194/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.8014e-04\n",
      "Epoch 195/200\n",
      "730/730 [==============================] - 0s 75us/step - loss: 3.8038e-04\n",
      "Epoch 196/200\n",
      "730/730 [==============================] - 0s 70us/step - loss: 3.7894e-04\n",
      "Epoch 197/200\n",
      "730/730 [==============================] - 0s 68us/step - loss: 3.8067e-04\n",
      "Epoch 198/200\n",
      "730/730 [==============================] - 0s 78us/step - loss: 3.8006e-04\n",
      "Epoch 199/200\n",
      "730/730 [==============================] - 0s 71us/step - loss: 3.7891e-04\n",
      "Epoch 200/200\n",
      "730/730 [==============================] - 0s 66us/step - loss: 3.7879e-04\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0x19ef46c6ef0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Fitting the RNN to the Trainign set\n",
    "regressor.fit(X_train, y_train, batch_size = 32, epochs = 200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(730, 1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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H4b6uuuuI78e3SrsB2/74osvePbZZytNm5mZyeuvv17rc8ybN48FTu7ODhw4wLhx44iNjaVv377MnTsXMB5gW7VqVa3PU658sLyq1PQ7vOyyy+o1zHerYxcI6lIi0Dm55BBEYKgXvbob1UMaD664MahWx5nDezyZemftMyAalQSCerAfhtrHx4c333zTYbvWGrPZXOvjTpkyhYceeqjS7XUNBJW55557uO+++9i+fTv79u3j7rvvBuofCGqipt/hqlWrCA0NdWle3IpdFU5ebu3r6IuzCynFm6BwLwiyXfy1uRbHqsPfvmgaEggayIUXXsjhw4c5fvw4ffv25c4772To0KEkJCRUOgzz6tWr6dOnD6NHj2bFihXWY9lPHJOcnMw111zD4MGDGTx4MJs3b+ahhx7iyJEjxMbG8sADDwCVD3s9f/58evfuzcSJEzlw4IDTvJ8+fZro6Gjr8sCBAykuLubxxx9n+fLl1qea09PTufrqq61PCO/cuROofPjpcqmpqYwaNYqvv/66zt+h/cQ977//PoMGDWLw4MHccsstAJw9e5apU6cyfPhwhg8fzk8//VT9L82N6UK7EkFmaa33L98nMMgD+vSxrg82lVW2S0UN8XSzaBRuMehcE49CTWlpKd988w2XXHIJYFS1vPfee7z++uuVDsP84IMP8sc//pF169bRo0cPpk+f7vTY99xzD2PHjmXlypWUlZWRm5vLs88+y+7du9lu+dCVDXttMplYtmwZv//+O6WlpQwdOpRhw4ZVOMd9993H+PHjOf/885k8eTKzZ88mNDSUJ598kvj4eOv4QXfffTdDhgzhs88+Y926dcycOZPt27c7HX66XHJyMlOmTOHpp5+2js5a2+/Q3p49e5g/fz4//fQTbdq0IT09HYB7772X++67j9GjR3Py5Ekuvvhi9u3bV6PfnzsqKbBd/PMyigHvWu2fk2EJBIGA3U1CiKkE8KvZQaoZUFE0H24RCJpK+TDUYNzN3nbbbSQlJdGlSxfrOEJbtmxxOgzz/v37iYmJoWfPngDcfPPNTieqWbduHe+//z5g1KeHhIQ4XGih8mGvc3JyuOaaawgICACMKidnZs+ezcUXX8zq1av5/PPPeeutt9ixY0eFdJs2bbLe7Y8fP560tDSysrKcDj8NxlhJEyZMYOHChYwdO7bO3+G538e0adNo06YN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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Part 3 - Making the predictions and visualising the results based on the training data\n",
    "\n",
    "# Get the real stock price 2016 - 2018\n",
    "# Importing the training set\n",
    "real_stock_price = pd.read_csv(\"zgpa_2016-18.csv\")\n",
    "real_stock_price_train = real_stock_price.iloc[:,1:2].values\n",
    "# Getting the predicted stock price of 2016 - 2018\n",
    "predicted_stock_price_train = regressor.predict(X_train)\n",
    "print(predicted_stock_price_train.shape)\n",
    "predicted_stock_price_train = sc.inverse_transform(predicted_stock_price_train)\n",
    "# visualising the results\n",
    "plt.plot(real_stock_price_train[1:m], color = 'red', label = 'Real Stock Price')\n",
    "plt.plot(predicted_stock_price_train, color = 'blue', label = 'Predicted Stock Price')\n",
    "plt.title('Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Tpzo9dyEhAS8//77WX7GuHHjMHnyZLf9O3fuROfOnREVFYXGjRtjxIgRACSAbfHixVl+jsEky8sIX3/D66+/PkdpvjNi6NChqFy5Mpo2beq0Py4uDt26dUP9+vXRrVs3xMfHB+T5gcAes5dBPkEkJAA//+y+33VEYFJNLFokKalTUrLWHkcORCVECagQENFoItpKRFuI6CsiKkZEkUS0joh2EdEcIioSyDYEEnsa6iJFiuDDDz90Os7MSEtLy/J9+/btizFjxng9nl0h8MaoUaMwevRobNy4Edu3b8dDDmfxnAqBL/j6Gy5evBhls/s66mDIkCFOSfLs+5csWeK2f+LEiYiOjsauXbsQHR2doTiHGosWWetvvQV407DBg4HOnYETJ5z3u44IIiMBo5Nr14qJyB5jkBlnz/p+rhJ8AiYERFQDwCgAbZi5KYCCAAYAmATgTWauDyAewLBAtSGYXHvttdi9ezf27duHxo0b4/7770erVq1w8OBBr2mYlyxZgkaNGuGaa67BN998k34ve+GY2NhY3HzzzWjRogVatGiBtWvXYsyYMdizZw+ioqLwxBNPAPCe9nrChAlo2LAhrrvuOuzcudNj248ePYqaNWumbzdr1gwXL17E888/jzlz5qRHNcfFxeGmm25KjxDe7PAr9JZ+2nDy5El06NABi+y9UxZ/Q3vhnlmzZqF58+Zo0aIF7rrrLgDAiRMncOutt6Jt27Zo27Ytfvvtt8z/aA46duyYnlDPzoIFCzB48GAAksjvu+++8/meuc3Jk872/aNHPZ+3aZMsZ81y3u9pjqBECWv97Fngued8b4/WRQhtAu0+WghAcSJKAVACwFEAXQHc7jg+E8A4AB/k5CG5nIUaly5dwo8//oiePXsCEFPLp59+ivfff99rGuYnn3wSw4cPx8qVK1GvXj3079/f471HjRqFTp064dtvv0VqairOnDmDiRMnYsuWLdjo+NLe0l6XLFkSs2fPxt9//41Lly6hVatWaN26tdszRo8eja5du+Kqq65C9+7dcffdd6Ns2bJ48cUXERMTk54/6KGHHkLLli3x3XffYeXKlRg0aBA2btzoMf20ITY2Fn379sXLL7+cnp01q7+hna1bt2LChAn47bffULFiRcTFxQEAHn74YYwePRrXXHMNDhw4gB49emD79u0+/f28ERsbi2rVqgEAqlWr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AKVKSWrlEydkwtfk1NEJXkVRfCD/C0GxYtb6J5/k7F5HjgB168pEama89RZQvrxk0cyIl14CbrpJOvXYWM/n7Nsn7puffCLZPQH3ylorV0qCtyFDJODro48yb6OiKArCQQgAqyZt6dLZvwczcOONsr5nDzB4sCRP27xZ9qWmin/+smUSYDV6tBRCHjMG2LlT0jF44uBB6569eklk78iRYtZ55x2Z6I6MFBEaPlzOHT9ekrYlJAC7dklE8KJFEj384ovy3Kio7H9XRVHCC18SEuX2J8dJ5/bskcRmzz+f/Xvs3i33GDvWPWFaixbMEyc67ytXjvnBB63tESOse334IXP//swDBjDXrs1crx7z/PnMhQu739t8bruN+Z13mHv39k+yOEVR8j3wMelcrnfyvnz8kn3UdKgHDvh+zfnzzFu3yvrSpZyeRfPTT7132M2bMz/xBPPevXLdypWyv04d5mee8XyNyZz59NOy3bkz84ULzCVKyPbkyTn//oqihB0qBO6/iPXZtMm3a559Vs7fvp35jTecheT335nfeov58GHrvjNner7PpEnOz4+MZI6PZ54zxxIaZuaLF5lnz2Y+fly233uP+c47mc+cyf73VhQlbPFVCMKnZrE9d86ECVLcxJVDh8Q2/9NP4nVzyy1SHtFw2WViy3etmfvmm+Ih9Oij7jl6AAnwatBAMnr++afEM2jmTEVRAozWLHZl+nRr/Y8/PJ+zeLFMwL7yiufjMTGeC6ePHg089phnEQAkr09srEQ316qlIqAoSkgRPiMCQN7477hDSiO+/TbQqZMUNbniCsm4ecMN1rkbN4rnTc+ekp65QAHgvvty3gZFUZQgketJ50KSmjWlZm2/fsCrr1r5dw4dchYBQPL0AFK164EHgttORVGUIBI+piFDvXqSkfTwYWtfzZrW+tSpsly6VJZDhwavbYqiKLlA+AkB4L04yp9/SsdfqJCUcaxZEyhRIrhtUxRFCTLhKQR164rdHwC+/97a36iRTAYboWjRIvhtUxRFCTLhNUdgIJKKXElJzkVaSpWS5eTJMjdw//250z5FUZQgEp5CAIgYGBFYvNg5M2nLljKH4M0dVFEUJR8RvkJgp1cv930qAoqihAnhOUegKIqipKNCoCiKEuaoECiKooQ5KgSKoihhjgqBoihKmKNCoCiKEuaoECiKooQ5KgSKoihh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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# visualising the results\n",
    "plt.plot(real_stock_price_train[1:731], color = 'red', label = 'Real Stock Price')\n",
    "plt.plot(predicted_stock_price_train+10, color = 'blue', label = 'Predicted Stock Price+10')\n",
    "plt.title('Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = np.concatenate((real_stock_price_train[1:1258],predicted_stock_price_train),axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = pd.DataFrame(result,columns=['real_price','predicted_price'])\n",
    "result.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result.to_csv('result.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2019-01-02</td>\n",
       "      <td>54.19</td>\n",
       "      <td>54.33</td>\n",
       "      <td>53.09</td>\n",
       "      <td>53.33</td>\n",
       "      <td>82554240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2019-01-03</td>\n",
       "      <td>53.30</td>\n",
       "      <td>54.48</td>\n",
       "      <td>53.21</td>\n",
       "      <td>53.83</td>\n",
       "      <td>69271120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2019-01-04</td>\n",
       "      <td>53.43</td>\n",
       "      <td>55.15</td>\n",
       "      <td>53.38</td>\n",
       "      <td>54.74</td>\n",
       "      <td>112985584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2019-01-07</td>\n",
       "      <td>55.24</td>\n",
       "      <td>55.32</td>\n",
       "      <td>54.05</td>\n",
       "      <td>54.45</td>\n",
       "      <td>76593008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2019-01-08</td>\n",
       "      <td>54.20</td>\n",
       "      <td>54.24</td>\n",
       "      <td>53.35</td>\n",
       "      <td>53.95</td>\n",
       "      <td>55992092</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date   open   high    low  close     volume\n",
       "0  2019-01-02  54.19  54.33  53.09  53.33   82554240\n",
       "1  2019-01-03  53.30  54.48  53.21  53.83   69271120\n",
       "2  2019-01-04  53.43  55.15  53.38  54.74  112985584\n",
       "3  2019-01-07  55.24  55.32  54.05  54.45   76593008\n",
       "4  2019-01-08  54.20  54.24  53.35  53.95   55992092"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Part 4 - Making the predictions and visualising the results based on the test data\n",
    "%matplotlib inline\n",
    "# Getting the real stock price of 201\n",
    "test_set = pd.read_csv(\"zgpa_2019.csv\")\n",
    "test_set.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(182, 1)\n"
     ]
    }
   ],
   "source": [
    "real_stock_price = test_set.loc[:,['open']].values\n",
    "print(real_stock_price.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Getting the predicted stock price of 2019\n",
    "m_test = real_stock_price.shape[0]\n",
    "X_test_ori = real_stock_price[0:m_test-1]\n",
    "y_test_ori = real_stock_price[1:m]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(181, 1) (181, 1)\n"
     ]
    }
   ],
   "source": [
    "print(X_test_ori.shape,y_test_ori.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = sc.transform(X_test_ori)\n",
    "X_test = np.reshape(X_test, (m_test-1, 1, 1))\n",
    "predicted_stock_price = regressor.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "predicted_stock_price = sc.inverse_transform(predicted_stock_price)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualising the results\n",
    "plt.plot(y_test_ori, color = 'red', label = 'Real Stock Price')\n",
    "plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted Stock Price')\n",
    "plt.title('Stock Price Prediction')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Part 5 - Evaluating the RNN\n",
    "# Evaluate of the RNN - learning to evaluate regression models\n",
    "# Root Mean Square Error (RMSE)\n",
    "\n",
    "import math\n",
    "from sklearn.metrics import mean_squared_error\n",
    "rmse = math.sqrt(mean_squared_error(y_test_ori, predicted_stock_price))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.8929753767453912"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rmse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.models import load_model\n",
    "regressor.save('rnn_zgpa_stock_predict.h5')  # creates a HDF5 file 'my_model.h5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = np.concatenate((y_test_ori,predicted_stock_price),axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>real_price</th>\n",
       "      <th>predicted_price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>53.30</td>\n",
       "      <td>54.181496</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>53.43</td>\n",
       "      <td>53.270210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>55.24</td>\n",
       "      <td>53.403240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>54.20</td>\n",
       "      <td>55.258179</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>54.35</td>\n",
       "      <td>54.191746</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   real_price  predicted_price\n",
       "0       53.30        54.181496\n",
       "1       53.43        53.270210\n",
       "2       55.24        53.403240\n",
       "3       54.20        55.258179\n",
       "4       54.35        54.191746"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = pd.DataFrame(result,columns=['real_price','predicted_price'])\n",
    "result.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "result.to_csv('zgpa_predicted.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 股价预测对比\n",
    "\n",
    "![result_comp](images/result_comp.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 输出层激活函数未sigmoid/tanh的预测结果\n",
    "\n",
    "![code_update](images/code_update.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 输出层激活函数未sigmoid/tanh的预测结果\n",
    "\n",
    "![sigmoid_output](images/sigmoid_output.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**预测准确率的局限性:** 无法真实反映模型针对各个分类的预测准确度\n",
    "\n",
    "任务：计算并对比预测模型预测准确率、空准确率\n",
    "\n",
    "空准确率：当模型总是预测比例较高的类别，其预测准确率的数值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**结论:**\n",
    "\n",
    "  分类准确率可以方便的用于衡量模型的整体预测效果，但无法反应细节信息，具体表现在：\n",
    "- 没有体现数据的**实际分布情况**\n",
    "- 没有体现模型**错误预测的类型**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 混淆矩阵\n",
    "\n",
    "又称为误差矩阵，用于衡量分类算法的准确程度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![confusion_matrix](images/06_confusion_matrix.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**名词解释**\n",
    "\n",
    "- **True Positives (TP):** 预测准确、实际为正样本的数量（实际为1，预测为1）\n",
    "- **True Negatives (TN):** 预测准确、实际为负样本的数量（实际为0，预测为0）\n",
    "- **False Positives (FP):** 预测错误、实际为负样本的数量（实际为0，预测为1）\n",
    "- **False Negatives (FN):** 预测错误、实际为正样本的数量（实际为1，预测为0）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Small confusion matrix](images/09_confusion_matrix_1.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Large confusion matrix](images/09_confusion_matrix_2.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 混淆矩阵指标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**准确率:** 整体样本中，预测正确样本数的比例\n",
    "- Accuracy = (TP + TN)/(TP + TN + FP + FN)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**精确率:** 预测结果为正的样本中，预测正确的比例\n",
    "- Precision = TP/(TP + FP)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**F1分数:** 综合Precision和Recall的一个判断指标\n",
    "- F1 Score = 2*Precision X Recall/(Precision + Recall)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![confusion matrix_metrics](images/09_confusion_matrix_3.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**结论:**\n",
    "\n",
    "- 分类任务中，相比单一的预测准确率，混淆矩阵提供了**更全面的模型评估信息**\n",
    "- 通过混淆矩阵，我们可以计算出**多样的模型表现衡量指标**，从而更好地选择模型\n",
    "\n",
    "**哪个衡量指标更关键?**\n",
    "\n",
    "- 衡量指标的选择取决于**应用场景**\n",
    "- **垃圾邮件检测** (正样本为 \"垃圾邮件\"): 希望普通邮件（负样本）不要被判断为垃圾邮件（正样本），需要关注**精确率**，希望判断为垃圾邮件的样本都是判断正确的；还需要关注**召回率**，希望所有的垃圾邮件尽可能被判断出来)\n",
    "- **异常交易检测** (正样本为 \"异常交易\"): 希望所有的异常交易都被检测到，即判断为正常的交易中尽可能不存在异常交易，需要关注**特异度**"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
